Outcome
Queue a processing job for an uploaded asset in the same space and inspect its later state.
Before you start
- Verify the authenticated identity, exact environment and pinned approved organization context before preparing an action.
- The published application permission is workspace:write. Discover a granted Spaces workspace and bind that exact resource. Supplied identifiers do not grant access.
- Authorize the documented storage, publication, invitation, notification, metering, privacy or archival effects before CLI --confirm or MCP confirm:true.
Discover the target
topolo whoami --json
topolo actions get app_topolo_spaces.assets.process --detail --json
topolo resources topolo-spaces --json
topolo workspaces list topolo-spaces --json
- Select the exact granted workspace id as SPACES_WORKSPACE_ID. Fixture ids authorize no live operation.
- Discover the exact spaceId from spaces.list or a retained creation response in this workspace.
- Use upload.assetId after the authenticated PUT succeeds and spaces.get reports that same source asset uploaded.
Request
POST /api/spaces/{spaceId}/process
Save action input as payload.json. Inspect the plan for the exact path, query and body. Set SPACES_WORKSPACE_ID from granted resource discovery.
Inspect and test this action in the signed action console, then perform the verification below.
Input fields
| Field | Required | Type | Constraints |
|---|---|---|---|
spaceId | Required | string | Exact space id discovered from spaces.list or a creation response in this granted workspace.; {"minLength":1} |
sourceAssetId | Required | string | upload.assetId after the returned authenticated PUT has completed and spaces.get reports status uploaded for the same space.; {"minLength":1} |
View the complete input schema in the action console. The same schema is available through CLI and MCP action discovery.
Effects
- Requires the source asset to belong to this workspace and space with status uploaded. Inserts a queued job, marks the space processing, sends to a configured queue and records an event.
- HTTP 202 and job.status queued acknowledge the job only. The queue consumer promotes a .sog asset to ready and completes its job based on the filename; it does not validate Gaussian content.
- .ply/.zip jobs enter waiting_processor in the current consumer. A deployed external converter is not established by this handler. Repetition can enqueue another job while the source still remains uploaded; no idempotency key or job-cancellation action is published.
Interpret the response
Use response path $.job.id for processing_job. An empty list does not discover a target.
Save job.id; reread spaces.get and locate that exact job, its asset status and the space runtime asset. Only treat completed/ready as metadata completion. Verify a real renderer separately with valid capture bytes, and do not claim a waiting_processor job completed.
The success schema was checked against captured handler responses. Delegated Auth identity and canonical widget context fields can vary; exact Spaces envelopes and all thirteen SQL export table sets are source-reviewed against the migrated local schema. Error responses can be plain text; the original refusal body is retained. Error examples retain their actual refusal shapes.
View the complete success schema in the action console. The worked examples below retain complete raw captured Worker responses. CLI responses have a transport envelope and can be bounded unless --detail is requested; action discovery supplies the exact schema.
Worked examples
Real isolated local D1/R2 and source handlers with synthetic Auth/workspace discovery, queue transport, notification delivery and metering. Arbitrary fixture SOG bytes demonstrate handler state only, not valid Gaussian data, renderer quality, deployed processing or live effects. Annotation rows are seeded directly into isolated fixture storage because no annotation mutation is published. Refused examples demonstrate boundaries and must not be executed as successful workflows.
Refused request · HTTP 400
Actual local Worker response; all four migrated D1 databases and R2 are real. Auth identity/workspace discovery, queue transport, notification delivery and metering are simulated or disabled. Captured scenario: minimal.
Input · payload.json:
{
"spaceId": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
"sourceAssetId": "asset_6ad10ea2-d688-4a40-827d-baf67943669f"
}
CLI:
topolo actions validate app_topolo_spaces.assets.process --data @payload.json --json
topolo actions plan app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
Captured local response · HTTP 400:
{
"error": "uploaded_source_asset_required"
}
HTTP 400. The handler refused this request. Resolve its exact cause before retrying; input validation can reject an invalid fixture before it reaches the handler.
Successful request
Actual local Worker response; all four migrated D1 databases and R2 are real. Auth identity/workspace discovery, queue transport, notification delivery and metering are simulated or disabled. Captured scenario: minimal.
Input · payload.json:
{
"spaceId": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
"sourceAssetId": "asset_6ad10ea2-d688-4a40-827d-baf67943669f"
}
CLI:
topolo actions validate app_topolo_spaces.assets.process --data @payload.json --json
topolo actions plan app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --confirm --detail --json
MCP tool and arguments:
{
"tool": "topolo_call_action",
"arguments": {
"actionId": "app_topolo_spaces.assets.process",
"input": {
"spaceId": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
"sourceAssetId": "asset_6ad10ea2-d688-4a40-827d-baf67943669f"
},
"resourceType": "workspace",
"resourceId": "<identifier returned by granted resource discovery>",
"confirm": true
}
}
Captured local response · HTTP 202:
{
"job": {
"id": "job_bf877e48-0e0c-48a0-bd8f-3bc01c7061db",
"status": "queued"
}
}
HTTP 202. Save job.id; reread spaces.get and locate that exact job, its asset status and the space runtime asset. Only treat completed/ready as metadata completion. Verify a real renderer separately with valid capture bytes, and do not claim a waiting_processor job completed.
Refused request · HTTP 400
Actual local Worker response; all four migrated D1 databases and R2 are real. Auth identity/workspace discovery, queue transport, notification delivery and metering are simulated or disabled. Captured scenario: workflow.
Input · payload.json:
{
"spaceId": "space_bfe6af37-3588-406b-b103-7675eb527e82",
"sourceAssetId": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a"
}
CLI:
topolo actions validate app_topolo_spaces.assets.process --data @payload.json --json
topolo actions plan app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
Captured local response · HTTP 400:
{
"error": "uploaded_source_asset_required"
}
HTTP 400. The handler refused this request. Resolve its exact cause before retrying; input validation can reject an invalid fixture before it reaches the handler.
Another supported request
Actual local Worker response; all four migrated D1 databases and R2 are real. Auth identity/workspace discovery, queue transport, notification delivery and metering are simulated or disabled. Captured scenario: workflow.
Input · payload.json:
{
"spaceId": "space_bfe6af37-3588-406b-b103-7675eb527e82",
"sourceAssetId": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a"
}
CLI:
topolo actions validate app_topolo_spaces.assets.process --data @payload.json --json
topolo actions plan app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --confirm --detail --json
MCP tool and arguments:
{
"tool": "topolo_call_action",
"arguments": {
"actionId": "app_topolo_spaces.assets.process",
"input": {
"spaceId": "space_bfe6af37-3588-406b-b103-7675eb527e82",
"sourceAssetId": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a"
},
"resourceType": "workspace",
"resourceId": "<identifier returned by granted resource discovery>",
"confirm": true
}
}
Captured local response · HTTP 202:
{
"job": {
"id": "job_5ae462f9-9351-421a-81be-3f0572366340",
"status": "queued"
}
}
HTTP 202. Save job.id; reread spaces.get and locate that exact job, its asset status and the space runtime asset. Only treat completed/ready as metadata completion. Verify a real renderer separately with valid capture bytes, and do not claim a waiting_processor job completed.
Refused request · HTTP 400
Actual local Worker response; all four migrated D1 databases and R2 are real. Auth identity/workspace discovery, queue transport, notification delivery and metering are simulated or disabled. Captured scenario: privacy.
Input · payload.json:
{
"spaceId": "space_858bda7b-397a-4784-979e-609961a9a16e",
"sourceAssetId": "asset_97f79623-4436-421f-b9d8-24bae3fcd815"
}
CLI:
topolo actions validate app_topolo_spaces.assets.process --data @payload.json --json
topolo actions plan app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
Captured local response · HTTP 400:
{
"error": "uploaded_source_asset_required"
}
HTTP 400. The handler refused this request. Resolve its exact cause before retrying; input validation can reject an invalid fixture before it reaches the handler.
Another supported request
Actual local Worker response; all four migrated D1 databases and R2 are real. Auth identity/workspace discovery, queue transport, notification delivery and metering are simulated or disabled. Captured scenario: privacy.
Input · payload.json:
{
"spaceId": "space_858bda7b-397a-4784-979e-609961a9a16e",
"sourceAssetId": "asset_97f79623-4436-421f-b9d8-24bae3fcd815"
}
CLI:
topolo actions validate app_topolo_spaces.assets.process --data @payload.json --json
topolo actions plan app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --confirm --detail --json
MCP tool and arguments:
{
"tool": "topolo_call_action",
"arguments": {
"actionId": "app_topolo_spaces.assets.process",
"input": {
"spaceId": "space_858bda7b-397a-4784-979e-609961a9a16e",
"sourceAssetId": "asset_97f79623-4436-421f-b9d8-24bae3fcd815"
},
"resourceType": "workspace",
"resourceId": "<identifier returned by granted resource discovery>",
"confirm": true
}
}
Captured local response · HTTP 202:
{
"job": {
"id": "job_85640ab7-0cca-4f5a-9137-f91bf18db4c0",
"status": "queued"
}
}
HTTP 202. Save job.id; reread spaces.get and locate that exact job, its asset status and the space runtime asset. Only treat completed/ready as metadata completion. Verify a real renderer separately with valid capture bytes, and do not claim a waiting_processor job completed.
Another supported request
Actual local Worker response; all four migrated D1 databases and R2 are real. Auth identity/workspace discovery, queue transport, notification delivery and metering are simulated or disabled. Captured scenario: privacy.
Input · payload.json:
{
"spaceId": "space_ec15138f-dd1a-4a27-8374-a275d902cda8",
"sourceAssetId": "asset_afe60d9d-8181-4ddb-aa1c-ca34b7c2a2fb"
}
CLI:
topolo actions validate app_topolo_spaces.assets.process --data @payload.json --json
topolo actions plan app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.assets.process --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --confirm --detail --json
MCP tool and arguments:
{
"tool": "topolo_call_action",
"arguments": {
"actionId": "app_topolo_spaces.assets.process",
"input": {
"spaceId": "space_ec15138f-dd1a-4a27-8374-a275d902cda8",
"sourceAssetId": "asset_afe60d9d-8181-4ddb-aa1c-ca34b7c2a2fb"
},
"resourceType": "workspace",
"resourceId": "<identifier returned by granted resource discovery>",
"confirm": true
}
}
Captured local response · HTTP 202:
{
"job": {
"id": "job_414ba874-cbf4-4111-85f1-9f0d4ca6e043",
"status": "queued"
}
}
HTTP 202. Save job.id; reread spaces.get and locate that exact job, its asset status and the space runtime asset. Only treat completed/ready as metadata completion. Verify a real renderer separately with valid capture bytes, and do not claim a waiting_processor job completed.
Verify the result
- Save job.id; reread spaces.get and locate that exact job, its asset status and the space runtime asset.
- Only treat completed/ready as metadata completion. Verify a real renderer separately with valid capture bytes, and do not claim a waiting_processor job completed.
Errors and recovery
uploaded_source_asset_required(HTTP 400): Inspect spaces.get for the same source asset and status uploaded. Complete its authenticated PUT before processing; another space or a reserved-but-not-uploaded asset is refused.organization_context_required(HTTP 403): Stop and authenticate into the approved owning organization. Preserve the actual denial; a resource id does not grant organization access.workspace_required(HTTP 400): Discover the exact granted canonical workspace through resource/workspace discovery; bootstrap does not return a workspace record.
A plain-text server refusal is surfaced by CLI/MCP as http_error with its HTTP status and requestId; its text is not a structured service error.code. Auth, action-input validation and platform resource resolution can refuse a request before its handler. Retain the exact error, request id and context; requesting another context is not a legitimate way to bypass a refusal.
Recovery boundary
No individual job cancellation or retry action is published. Inspect current jobs before repeating; deleting the space removes job/asset metadata while retaining object bytes and is destructive.
Related actions
- Get space: Read one space with its stored asset, annotation, public-link and processing-job records.
- Get Spaces widget: Read workspace-scoped inventory, ready-space and active-processing-job counts in the canonical widget envelope.
- Set space visibility: Make a runtime-backed space available by unlisted link, or set it private and disable existing links.
Evidence
Real isolated local D1/R2 and source handlers with synthetic Auth/workspace discovery, queue transport, notification delivery and metering. Arbitrary fixture SOG bytes demonstrate handler state only, not valid Gaussian data, renderer quality, deployed processing or live effects. Annotation rows are seeded directly into isolated fixture storage because no annotation mutation is published. Capture digests and test scenarios are retained in the source fixture records.