application · internal

TopoloP2P

Cross-organization capability network for human and agent business actions, approvals, immutable micro-ledgering, and TopoloPay-managed settlement.

Documentation map

  • TopoloP2P — Public overview of Topolo's cross-organization capability network for human and agent business actions and settlement.

Authority and runtime

System ID
topolo-p2p
App IDs
app_topolo_p2p
Owners
platform, commerce-platform, ai-platform
Repositories
system-apps/TopoloP2P
Hosts
https://p2p.topolo.app, https://p2p.stg.topolo.us
Dependencies
topolo-auth, topolo-developers, topolo-agent, topolo-pay, topolo-notify, topolo-one, applications-packages

Security and data ownership

Risk tier
critical
Tenant isolation
mixed
Privacy classification
restricted
Storage
d1, external_provider
Export and deletion
planned
Enterprise ready
no

Source-derived capability inventory

Source revisions: system-apps/TopoloP2P@0ee9f3cb3b2f95f59806528354a9c86bf9226e23

Declared actions: 20 · API routes: 13 · UI routes: 6

{
  "id": "topolo-p2p",
  "name": "TopoloP2P",
  "slug": "topolo-p2p",
  "kind": "application",
  "visibility": "public",
  "repo_paths": [
    "system-apps/TopoloP2P"
  ],
  "source_revisions": [
    {
      "source_path": "system-apps/TopoloP2P",
      "repository": "system-apps/TopoloP2P",
      "revision": "0ee9f3cb3b2f95f59806528354a9c86bf9226e23",
      "ref": "origin/staging"
    }
  ],
  "source_counts": {
    "source_files": 50,
    "test_files": 29,
    "test_cases": 0,
    "migration_files": 10,
    "database_tables": 0,
    "manifests": 1,
    "deploy_targets": 2,
    "actions": 20,
    "mobile_contracts": 1,
    "notifications": 9,
    "package_manifests": 1,
    "deployment_configs": 0
  },
  "manifests": [
    {
      "source_path": "system-apps/TopoloP2P/topolo.app.json",
      "service_slug": "topolo-p2p",
      "name": "topolo-p2p",
      "app_id": "app_topolo_p2p",
      "compatibility_date": "2026-04-23",
      "primary_target": "web",
      "environments": [
        "development",
        "production",
        "staging"
      ],
      "targets": [
        {
          "name": "api",
          "kind": "worker",
          "directory": "apps/api",
          "main": "src/worker.ts",
          "worker_name": "topolo-p2p-api",
          "subdomain": null,
          "healthcheck_path": "/api/health",
          "variable_names": [
            "AUTH_BASE_URL",
            "ENVIRONMENT",
            "P2P_PUBLIC_BASE_URL",
            "TOPOLO_NOTIFY_URL",
            "TOPOLO_PAY_URL",
            "TOPOLO_SEED_APP_ID"
          ],
          "secret_names": [],
          "bindings": [
            {
              "kind": "d1",
              "binding": "P2P_CORE_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "P2P_RUNTIME_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "P2P_LEDGER_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "P2P_AUDIT_DB",
              "target": null
            }
          ]
        },
        {
          "name": "web",
          "kind": "worker",
          "directory": "apps/web",
          "main": "src/worker.ts",
          "worker_name": "topolo-p2p",
          "subdomain": "p2p",
          "healthcheck_path": "/api/health",
          "variable_names": [
            "INSIGHTS_SITE_KEY"
          ],
          "secret_names": [],
          "bindings": [
            {
              "kind": "services",
              "binding": "API",
              "target": null
            },
            {
              "kind": "services",
              "binding": "API",
              "target": null
            },
            {
              "kind": "services",
              "binding": "API",
              "target": null
            }
          ]
        }
      ],
      "notifications": [
        "p2p.connection.accepted",
        "p2p.connection.requested",
        "p2p.connection.revoked",
        "p2p.hold.placed",
        "p2p.hold.released",
        "p2p.policy.violation",
        "p2p.settlement.completed",
        "p2p.settlement.created",
        "p2p.settlement.failed"
      ],
      "notification_contract": {
        "source_path": "topolo.notification-contracts.json",
        "role": "producer",
        "schema_version": 1,
        "owner_app_id": "app_topolo_p2p",
        "events": [
          {
            "type": "p2p.connection.accepted",
            "version": 1,
            "description": "A P2P connection was durably transitioned to active.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "connection_id",
                "counterparty_organization_id",
                "status",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "connection_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "const": "active"
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P connection accepted",
                "body": "Connection with org_partner is active.",
                "object_id": "conn_1",
                "connection_id": "conn_1",
                "counterparty_organization_id": "org_partner",
                "status": "active",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/connections"
              }
            ],
            "dataClassification": "internal",
            "sensitiveFields": [],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:connection-active:"
            }
          },
          {
            "type": "p2p.connection.requested",
            "version": 1,
            "description": "A P2P connection request was durably persisted as pending.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "connection_id",
                "counterparty_organization_id",
                "status",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "connection_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "const": "pending"
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P connection requested",
                "body": "Connection with org_partner is pending.",
                "object_id": "conn_1",
                "connection_id": "conn_1",
                "counterparty_organization_id": "org_partner",
                "status": "pending",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/connections"
              }
            ],
            "dataClassification": "internal",
            "sensitiveFields": [],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:connection-pending:"
            }
          },
          {
            "type": "p2p.connection.revoked",
            "version": 1,
            "description": "An active or pending P2P connection was durably revoked.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "connection_id",
                "counterparty_organization_id",
                "previous_status",
                "status",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "connection_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "const": "revoked"
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P connection revoked",
                "body": "Connection with org_partner was revoked.",
                "object_id": "conn_1",
                "connection_id": "conn_1",
                "counterparty_organization_id": "org_partner",
                "previous_status": "active",
                "status": "revoked",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/connections"
              }
            ],
            "dataClassification": "internal",
            "sensitiveFields": [],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:connection-revoked:"
            }
          },
          {
            "type": "p2p.hold.placed",
            "version": 1,
            "description": "A dispute durably created a new active P2P hold.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "hold_id",
                "request_id",
                "counterparty_organization_id",
                "reason",
                "status",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "hold_id": {
                  "type": "string",
                  "minLength": 1
                },
                "request_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "reason": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "const": "active"
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P hold placed",
                "body": "A hold was placed on action req_1: delivery disputed.",
                "object_id": "hold_1",
                "hold_id": "hold_1",
                "request_id": "req_1",
                "counterparty_organization_id": "org_partner",
                "reason": "delivery disputed",
                "status": "active",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/actions/req_1"
              }
            ],
            "dataClassification": "confidential",
            "sensitiveFields": [
              "reason"
            ],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:hold-placed:"
            }
          },
          {
            "type": "p2p.hold.released",
            "version": 1,
            "description": "An active or disputed P2P hold was durably released.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "hold_id",
                "request_id",
                "counterparty_organization_id",
                "resolution",
                "status",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "hold_id": {
                  "type": "string",
                  "minLength": 1
                },
                "request_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "resolution": {
                  "enum": [
                    "buyer",
                    "seller"
                  ]
                },
                "status": {
                  "const": "released"
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P hold released",
                "body": "The hold on action req_1 was released to the seller.",
                "object_id": "hold_1",
                "hold_id": "hold_1",
                "request_id": "req_1",
                "counterparty_organization_id": "org_partner",
                "resolution": "seller",
                "status": "released",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/actions/req_1"
              }
            ],
            "dataClassification": "internal",
            "sensitiveFields": [],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:hold-released:"
            }
          },
          {
            "type": "p2p.policy.violation",
            "version": 1,
            "description": "A persisted P2P policy decision rejected an action request.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "decision_id",
                "request_id",
                "capability_id",
                "counterparty_organization_id",
                "rationale",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "decision_id": {
                  "type": "string",
                  "minLength": 1
                },
                "request_id": {
                  "type": "string",
                  "minLength": 1
                },
                "capability_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "rationale": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P policy blocked an action",
                "body": "The Print labels request was blocked: capability_blocked.",
                "object_id": "policy_1",
                "decision_id": "policy_1",
                "request_id": "req_1",
                "capability_id": "cap_print",
                "counterparty_organization_id": "org_partner",
                "rationale": "capability_blocked",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/actions/req_1"
              }
            ],
            "dataClassification": "confidential",
            "sensitiveFields": [
              "rationale"
            ],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:policy-violation:"
            }
          },
          {
            "type": "p2p.settlement.completed",
            "version": 1,
            "description": "TopoloPay confirmed that a persisted P2P settlement completed.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "batch_id",
                "counterparty_organization_id",
                "total_minor",
                "currency",
                "status",
                "pay_settlement_id",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "batch_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "total_minor": {
                  "type": "integer",
                  "minimum": 1
                },
                "currency": {
                  "type": "string",
                  "minLength": 3,
                  "maxLength": 3
                },
                "status": {
                  "const": "paid"
                },
                "pay_settlement_id": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P settlement completed",
                "body": "2500 USD settled successfully.",
                "object_id": "batch_1",
                "batch_id": "batch_1",
                "counterparty_organization_id": "org_partner",
                "total_minor": 2500,
                "currency": "USD",
                "status": "paid",
                "pay_settlement_id": "payset_1",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/settlements"
              }
            ],
            "dataClassification": "confidential",
            "sensitiveFields": [
              "total_minor"
            ],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:settlement-completed:"
            }
          },
          {
            "type": "p2p.settlement.created",
            "version": 1,
            "description": "A P2P settlement batch and its Pay submission were durably persisted.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "batch_id",
                "counterparty_organization_id",
                "total_minor",
                "currency",
                "status",
                "pay_settlement_id",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "batch_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "total_minor": {
                  "type": "integer",
                  "minimum": 1
                },
                "currency": {
                  "type": "string",
                  "minLength": 3,
                  "maxLength": 3
                },
                "status": {
                  "enum": [
                    "pending",
                    "submitted"
                  ]
                },
                "pay_settlement_id": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P settlement created",
                "body": "2500 USD was submitted for settlement.",
                "object_id": "batch_1",
                "batch_id": "batch_1",
                "counterparty_organization_id": "org_partner",
                "total_minor": 2500,
                "currency": "USD",
                "status": "submitted",
                "pay_settlement_id": "payset_1",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/settlements"
              }
            ],
            "dataClassification": "confidential",
            "sensitiveFields": [
              "total_minor"
            ],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:settlement-created:"
            }
          },
          {
            "type": "p2p.settlement.failed",
            "version": 1,
            "description": "A persisted P2P settlement failed during submission or Pay processing.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "batch_id",
                "counterparty_organization_id",
                "total_minor",
                "currency",
                "status",
                "pay_settlement_id",
                "occurred_at",
                "cta_url"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "batch_id": {
                  "type": "string",
                  "minLength": 1
                },
                "counterparty_organization_id": {
                  "type": "string",
                  "minLength": 1
                },
                "total_minor": {
                  "type": "integer",
                  "minimum": 1
                },
                "currency": {
                  "type": "string",
                  "minLength": 3,
                  "maxLength": 3
                },
                "status": {
                  "const": "failed"
                },
                "pay_settlement_id": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "P2P settlement failed",
                "body": "2500 USD failed to settle.",
                "object_id": "batch_1",
                "batch_id": "batch_1",
                "counterparty_organization_id": "org_partner",
                "total_minor": 2500,
                "currency": "USD",
                "status": "failed",
                "pay_settlement_id": "payset_1",
                "occurred_at": "2026-07-20T00:00:00.000Z",
                "cta_url": "https://p2p.topolo.app/settlements"
              }
            ],
            "dataClassification": "confidential",
            "sensitiveFields": [
              "total_minor"
            ],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^p2p:settlement-failed:"
            }
          }
        ]
      },
      "actions": [
        {
          "name": "widget.get",
          "title": "Get widget summary",
          "description": "Get the TopoloOne widget summary for this service.",
          "method": "GET",
          "path": "/api/widget",
          "permission": "directory:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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": "directory.capabilities.list",
          "title": "List P2P capabilities",
          "description": "List P2P directory capabilities.",
          "method": "GET",
          "path": "/api/directory/capabilities",
          "authorizationMode": "public",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 100
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List P2P capabilities.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "limit": 1
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/directory/capabilities",
              "body": null
            },
            "effects": "Reads state through GET /api/directory/capabilities 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/directory/capabilities",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "directory.capabilities.get",
          "title": "Get P2P capability",
          "description": "Get one public P2P directory capability.",
          "method": "GET",
          "path": "/api/directory/capabilities/{capabilityId}",
          "authorizationMode": "public",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "capabilityId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "capabilityId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "capabilityId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/directory/capabilities/example",
              "body": null
            },
            "effects": "Reads state through GET /api/directory/capabilities/{capabilityId} 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/directory/capabilities/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "connections.list",
          "title": "List P2P connections",
          "description": "List P2P connections.",
          "method": "GET",
          "path": "/api/connections",
          "permission": "directory:read",
          "authorizationMode": "static",
          "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 P2P connections.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/connections",
              "body": null
            },
            "effects": "Reads state through GET /api/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/connections",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "connections.create",
          "title": "Create P2P connection",
          "description": "Create a P2P connection.",
          "method": "POST",
          "path": "/api/connections",
          "permission": "connections:write",
          "authorizationMode": "static",
          "readOnly": false,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "counterparty_org_id": {
                "type": "string",
                "minLength": 1
              },
              "status": {
                "type": "string",
                "enum": [
                  "pending",
                  "active",
                  "suspended"
                ]
              }
            },
            "required": [
              "counterparty_org_id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create P2P connection.",
            "additionalProperties": true
          },
          "destructive": false,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "counterparty_org_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/connections",
              "body": {
                "counterparty_org_id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/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/connections",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "connections.revoke",
          "title": "Revoke P2P connection",
          "description": "Revoke a P2P connection.",
          "method": "DELETE",
          "path": "/api/connections/{connectionId}",
          "permission": "connections:write",
          "authorizationMode": "static",
          "readOnly": false,
          "destructive": true,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "connectionId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "connectionId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Revoke P2P connection.",
            "additionalProperties": true
          },
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "connectionId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/connections/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/connections/{connectionId}. 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/connections/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "ledger.list",
          "title": "List P2P ledger",
          "description": "List P2P ledger entries.",
          "method": "GET",
          "path": "/api/ledger",
          "permission": "ledger:read",
          "authorizationMode": "static",
          "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 P2P ledger.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/ledger",
              "body": null
            },
            "effects": "Reads state through GET /api/ledger 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/ledger",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "settlements.preview",
          "title": "Preview settlements",
          "description": "Preview P2P settlement batches.",
          "method": "POST",
          "path": "/api/settlements/preview",
          "permission": "settlements:write",
          "authorizationMode": "static",
          "readOnly": false,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "buyer_org_id": {
                "type": "string",
                "minLength": 1
              },
              "seller_org_id": {
                "type": "string",
                "minLength": 1
              },
              "currency": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Preview settlements.",
            "additionalProperties": true
          },
          "destructive": false,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "buyer_org_id": "00000000-0000-4000-8000-000000000000",
              "seller_org_id": "00000000-0000-4000-8000-000000000000",
              "currency": "USD"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/settlements/preview",
              "body": {
                "buyer_org_id": "00000000-0000-4000-8000-000000000000",
                "seller_org_id": "00000000-0000-4000-8000-000000000000",
                "currency": "USD"
              }
            },
            "effects": "May change state through POST /api/settlements/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/settlements/preview",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "settlements.create",
          "title": "Create settlement",
          "description": "Create a P2P settlement.",
          "method": "POST",
          "path": "/api/settlements/create",
          "permission": "settlements:approve",
          "authorizationMode": "static",
          "readOnly": false,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "buyer_org_id": {
                "type": "string",
                "minLength": 1
              },
              "seller_org_id": {
                "type": "string",
                "minLength": 1
              },
              "currency": {
                "type": "string",
                "minLength": 1
              },
              "trigger": {
                "type": "string",
                "enum": [
                  "threshold",
                  "schedule",
                  "manual",
                  "invoice",
                  "delivery"
                ]
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create settlement.",
            "additionalProperties": true
          },
          "destructive": false,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "buyer_org_id": "00000000-0000-4000-8000-000000000000",
              "seller_org_id": "00000000-0000-4000-8000-000000000000",
              "currency": "USD"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/settlements/create",
              "body": {
                "buyer_org_id": "00000000-0000-4000-8000-000000000000",
                "seller_org_id": "00000000-0000-4000-8000-000000000000",
                "currency": "USD"
              }
            },
            "effects": "May change state through POST /api/settlements/create. 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/settlements/create",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "policies.get",
          "title": "Get P2P policy",
          "description": "Get P2P policy.",
          "method": "GET",
          "path": "/api/policies",
          "permission": "policy:read",
          "authorizationMode": "static",
          "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 P2P policy.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/policies",
              "body": null
            },
            "effects": "Reads state through GET /api/policies 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/policies",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "policies.update",
          "title": "Update P2P policy",
          "description": "Update P2P policy.",
          "method": "PUT",
          "path": "/api/policies",
          "permission": "policy:write",
          "authorizationMode": "static",
          "readOnly": false,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "auto_approve_under_minor": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "agent_spend_limit_minor_per_day": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "human_approval_threshold_minor": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "unknown_counterparty_requires_approval": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "blocked_capability_ids": {
                "anyOf": [
                  {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  {
                    "type": "string",
                    "minLength": 1
                  }
                ]
              },
              "trusted_counterparty_org_ids": {
                "anyOf": [
                  {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  {
                    "type": "string",
                    "minLength": 1
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update P2P policy.",
            "additionalProperties": true
          },
          "destructive": false,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "auto_approve_under_minor": 1,
              "agent_spend_limit_minor_per_day": 1,
              "human_approval_threshold_minor": 1
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/policies",
              "body": {
                "auto_approve_under_minor": 1,
                "agent_spend_limit_minor_per_day": 1,
                "human_approval_threshold_minor": 1
              }
            },
            "effects": "May change state through PUT /api/policies. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "PUT /api/policies",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "actions.list",
          "title": "List P2P actions",
          "description": "List P2P action requests.",
          "method": "GET",
          "path": "/api/actions",
          "permission": "actions:invoke",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 100
              },
              "state": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List P2P actions.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "limit": 1,
              "state": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/actions",
              "body": null
            },
            "effects": "Reads state through GET /api/actions 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/actions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "actions.get",
          "title": "Get P2P action",
          "description": "Get one organization-scoped P2P action request and its lifecycle details.",
          "method": "GET",
          "path": "/api/actions/{requestId}",
          "permission": "actions:invoke",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "requestId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "requestId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "requestId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/actions/example",
              "body": null
            },
            "effects": "Reads state through GET /api/actions/{requestId} 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/actions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "actions.request",
          "title": "Request P2P action",
          "description": "Request a P2P action.",
          "method": "POST",
          "path": "/api/actions/request",
          "permission": "actions:request",
          "authorizationMode": "static",
          "readOnly": false,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "capability_id": {
                "type": "string",
                "minLength": 1
              },
              "idempotency_key": {
                "type": "string",
                "minLength": 1
              },
              "inputs": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "string",
                    "minLength": 1
                  }
                ]
              }
            },
            "required": [
              "capability_id",
              "idempotency_key"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Request P2P action.",
            "additionalProperties": true
          },
          "destructive": false,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "capability_id": "00000000-0000-4000-8000-000000000000",
              "idempotency_key": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/actions/request",
              "body": {
                "capability_id": "00000000-0000-4000-8000-000000000000",
                "idempotency_key": "example"
              }
            },
            "effects": "May change state through POST /api/actions/request. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/actions/request",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "actions.respond",
          "title": "Respond to P2P action",
          "description": "Respond to a P2P action.",
          "method": "POST",
          "path": "/api/actions/{requestId}/respond",
          "permission": "actions:respond",
          "authorizationMode": "runtime",
          "readOnly": false,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "requestId": {
                "type": "string",
                "minLength": 1
              },
              "response": {
                "type": "string",
                "enum": [
                  "accepted",
                  "quoted",
                  "rejected",
                  "approved"
                ]
              },
              "quote": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "string",
                    "minLength": 1
                  }
                ]
              },
              "reason": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "requestId",
              "response"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Respond to P2P action.",
            "additionalProperties": true
          },
          "destructive": false,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "requestId": "example",
              "response": "accepted"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/actions/example/respond",
              "body": {
                "requestId": "example",
                "response": "accepted"
              }
            },
            "effects": "May change state through POST /api/actions/{requestId}/respond. 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/actions/*/respond",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "actions.complete",
          "title": "Complete P2P action",
          "description": "Complete a P2P action.",
          "method": "POST",
          "path": "/api/actions/{requestId}/complete",
          "permission": "actions:respond",
          "authorizationMode": "runtime",
          "readOnly": false,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "requestId": {
                "type": "string",
                "minLength": 1
              },
              "result": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "string",
                    "minLength": 1
                  }
                ]
              }
            },
            "required": [
              "requestId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Complete P2P action.",
            "additionalProperties": true
          },
          "destructive": false,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "requestId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/actions/example/complete",
              "body": {
                "requestId": "example"
              }
            },
            "effects": "May change state through POST /api/actions/{requestId}/complete. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/actions/*/complete",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "actions.dispute",
          "title": "Dispute P2P action",
          "description": "Dispute a P2P action.",
          "method": "POST",
          "path": "/api/actions/{requestId}/dispute",
          "permission": "actions:respond",
          "authorizationMode": "runtime",
          "readOnly": false,
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "requestId": {
                "type": "string",
                "minLength": 1
              },
              "reason": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "requestId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Dispute P2P action.",
            "additionalProperties": true
          },
          "destructive": false,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "requestId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/actions/example/dispute",
              "body": {
                "requestId": "example"
              }
            },
            "effects": "May change state through POST /api/actions/{requestId}/dispute. 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/actions/*/dispute",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "holds.release",
          "title": "Release P2P hold",
          "description": "Resolve a P2P hold to the buyer or seller and apply any required ledger counter-reversal.",
          "method": "POST",
          "path": "/api/holds/{holdId}/release",
          "permission": "actions:respond",
          "authorizationMode": "runtime",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "holdId": {
                "type": "string",
                "minLength": 1
              },
              "resolution": {
                "type": "string",
                "enum": [
                  "buyer",
                  "seller"
                ]
              },
              "reason": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "holdId",
              "resolution"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "holdId": "example",
              "resolution": "buyer"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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/holds/example/release",
              "body": {
                "holdId": "example",
                "resolution": "buyer"
              }
            },
            "effects": "May change state through POST /api/holds/{holdId}/release. 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/holds/*/release",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "organizations.data.export",
          "title": "Export organization P2P data",
          "description": "Export the caller organization's P2P records across directory, runtime, ledger, and audit stores.",
          "method": "GET",
          "path": "/api/organizations/{organizationId}/data",
          "permission": "privacy:read",
          "authorizationMode": "static",
          "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",
          "documentation": {
            "example_input": {
              "organizationId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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 organization P2P data",
          "description": "Erase organization-owned P2P content while retaining immutable bilateral financial records required for ledger integrity.",
          "method": "DELETE",
          "path": "/api/organizations/{organizationId}/data",
          "permission": "privacy:write",
          "authorizationMode": "static",
          "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",
          "documentation": {
            "example_input": {
              "organizationId": "example",
              "confirmation": "ERASE"
            },
            "cli_example": [
              "topolo actions --service topolo-p2p --json",
              "topolo actions get <action-id> --json",
              "topolo actions 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."
          }
        }
      ],
      "action_coverage": {
        "status": "ok",
        "served_routes": 26,
        "matched_actions": 20,
        "declared_unserved_actions": [],
        "coverage_excluded_actions": [],
        "uncatalogued_routes": [],
        "ignored_routes": 6,
        "configured_exclusions": 3,
        "configuration_findings": [],
        "notes": [
          "2 manually-declared route(s)"
        ]
      },
      "runtime_contract_audit": {
        "status": "verified",
        "actions": 20,
        "contracts": 20,
        "contract_module": "topolo.action-contracts.mjs",
        "validator_sources": [
          "apps/api/src/worker.ts"
        ],
        "authorization_sources": [
          "apps/api/src/worker.ts"
        ],
        "findings": []
      }
    }
  ],
  "mobile_contracts": [
    {
      "source_path": "system-apps/TopoloP2P/topolo.mobile-experience.json",
      "contract": {
        "version": "2026-06-29",
        "status": "approved",
        "mode": "native_capability",
        "appId": "app_topolo_p2p",
        "localizationNamespace": "p2p",
        "permissions": [
          "directory:read",
          "ledger:read"
        ],
        "offlinePolicy": "read_through_cache",
        "fallbackPath": "/capabilities",
        "auth": {
          "audience": "topolo-p2p",
          "scopes": [
            "directory:read",
            "ledger:read"
          ]
        },
        "routes": [
          {
            "path": "/capabilities",
            "apiPath": "/api/directory/capabilities",
            "title": "Capabilities",
            "titleKey": "p2p.mobile.routes.capabilities.title",
            "template": "record.list",
            "dataSource": "p2p.capabilities.list"
          },
          {
            "path": "/connections",
            "apiPath": "/api/connections",
            "title": "Connections",
            "titleKey": "p2p.mobile.routes.connections.title",
            "template": "record.list",
            "dataSource": "p2p.connections.list"
          },
          {
            "path": "/ledger",
            "apiPath": "/api/ledger",
            "title": "Ledger",
            "titleKey": "p2p.mobile.routes.ledger.title",
            "template": "record.list",
            "dataSource": "p2p.ledger.list"
          }
        ]
      }
    }
  ],
  "package_manifests": [],
  "deployment_configs": [],
  "source_signals": {
    "api_routes": [
      {
        "method": "ALL",
        "path": "*",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/health",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/health",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/directory/capabilities",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/p2p/internal/capabilities/sync",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/widget",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/connections",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/ledger",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/settlements/preview",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/settlements/create",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/policies",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/actions",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/actions/request",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      }
    ],
    "ui_routes": [
      {
        "path": "/actions/${encodeURIComponent(requestId)}",
        "source_path": "system-apps/TopoloP2P/apps/api/src/actions.ts"
      },
      {
        "path": "/actions/${encodeURIComponent(action.request_id)}",
        "source_path": "system-apps/TopoloP2P/apps/api/src/actions.ts"
      },
      {
        "path": "/connections",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "path": "/actions/${encodeURIComponent(hold.request_id)}",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "path": "/settlements",
        "source_path": "system-apps/TopoloP2P/apps/api/src/worker.ts"
      },
      {
        "path": "/dashboard",
        "source_path": "system-apps/TopoloP2P/apps/web/src/App.tsx"
      }
    ],
    "test_cases": [],
    "database_tables": []
  },
  "documentation": {
    "declared_paths": [
      "applications/topolo-p2p",
      "internal/apps/topolo-p2p",
      "internal/platform/p2p-protocol",
      "internal/platform/p2p-ledger-and-settlement"
    ],
    "present_paths": [
      "applications/topolo-p2p",
      "internal/apps/topolo-p2p",
      "internal/platform/p2p-protocol",
      "internal/platform/p2p-ledger-and-settlement"
    ],
    "missing_paths": [],
    "human_reference": "/systems/topolo-p2p",
    "machine_reference": "/machine/systems/topolo-p2p.json",
    "action_examples": 20,
    "action_schemas": 20
  },
  "source_findings": []
}