Command Center Bulk Actions
The apps/v1 API exposes backend-authoritative bulk deletion for asset
categories, portfolios, and portfolio groups. These routes implement the
Command Center SDK v1 resource discovery, execution, and preflight contracts
pinned to command-center-sdk 0.1.13, commit
f11c0ea8c5d3fc267997e476aa1522c798fdaced.
Resource boundaries
| Resource | Discovery | Preflight | Execution |
|---|---|---|---|
| Asset categories | GET /api/v1/asset-category/discovery/ |
POST /api/v1/asset-category/bulk-delete/preflight/ |
POST /api/v1/asset-category/bulk-delete/ |
| Portfolios | GET /api/v1/portfolio/discovery/ |
POST /api/v1/portfolio/bulk-delete/preflight/ |
POST /api/v1/portfolio/bulk-delete/ |
| Portfolio groups | GET /api/v1/portfolio-group/discovery/ |
POST /api/v1/portfolio-group/bulk-delete/preflight/ |
POST /api/v1/portfolio-group/bulk-delete/ |
Each command-center.resource_discovery@v1 response advertises one destructive action with explicit
selection. all_matching is deliberately not advertised. Discovery supplies
the execution endpoint, preflight endpoint, confirmation copy, tone, supported
selection modes, and options.
Canonical request
Preflight and execution receive the same
command-center.bulk_action_execution@v1 body:
{
"selection": {
"mode": "explicit",
"uids": ["7dc962fe-58e6-4a04-9cc6-20b44d678d42"]
},
"options": {}
}
The selected resources use UUID identities and currently advertise no options.
Unknown options, numeric identifiers, and unadvertised selection modes are
rejected. The former { "uids": [...], "select_all": false } HTTP payload is
not part of this contract.
Preflight and execution
Preflight returns command-center.bulk_action_preflight@v1. It resolves every
selected UID and reports allowed, matched_count, blockers, and warnings
without mutating data. Portfolio preflight also evaluates protected
VirtualFund and target-position references.
Execution repeats preflight immediately before invoking domain deletion. A
blocked selection returns HTTP 409 and does not call the delete service. The
underlying delete operation still performs its own conflict checks, protecting
against authorization or reference changes between preflight and execution.
Request validation errors return 422. Unsupported modes or options return
400. A preflight that discovers missing or protected rows returns 200 with
allowed: false; execution of that same selection returns 409.
Provider discovery
The discovery and preflight operation IDs are also exposed through
/.well-known/command-center/connection-contract as resource operations. The
three execution operation IDs remain mutation operations:
discoverAssetCategories/preflightBulkDeleteAssetCategories/bulkDeleteAssetCategoriesdiscoverPortfolios/preflightBulkDeletePortfolios/bulkDeletePortfoliosdiscoverPortfolioGroups/preflightBulkDeletePortfolioGroups/bulkDeletePortfolioGroups
The language-neutral manifest, schemas, and fixtures in command-center-sdk are
the contract authority. The API-owned Python models under
apps.v1.schemas.bulk_actions implement those wire formats without importing
deprecated MainSequence SDK Command Center modules.