Topolo Docs Topolo Platform
Open workspace

Get space

Read one space with its stored asset, annotation, public-link and processing-job records.

Outcome

Read one space with its stored asset, annotation, public-link and processing-job records.

Before you start

  • Verify the authenticated identity, exact environment and pinned approved organization context before preparing an action.
  • The published application permission is workspace:read. Discover a granted Spaces workspace and bind that exact resource. Supplied identifiers do not grant access.

Discover the target

topolo whoami --json
topolo actions get app_topolo_spaces.spaces.get --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.

Request

GET /api/spaces/{spaceId}

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

FieldRequiredTypeConstraints
spaceIdRequiredstringExact space id discovered from spaces.list or a creation response in this granted workspace.; {"minLength":1}

View the complete input schema in the action console. The same schema is available through CLI and MCP action discovery.

Effects

  • Reads raw workspace-scoped metadata and current runtimeAssetUrl. Array fields can be empty and runtimeAssetUrl can be null.
  • Stored asset object keys and link slugs are included for an authorized workspace reader. Job states distinguish queued, processing, waiting_processor, completed and failed.
  • Annotations are readable but the current sixteen-action catalog publishes no annotation mutation. Metadata readiness does not validate Gaussian bytes or establish renderer quality.

Interpret the response

Use response path $.space.id for space. An empty list does not discover a target.

Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

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.

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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_9338e6fc-cc93-421e-a783-6c8062088e0c"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_minimal",
    "title": "Untitled space",
    "description": "",
    "status": "draft",
    "visibility": "private",
    "active_runtime_asset_id": null,
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:16.023Z",
    "updated_at": "2026-10-04T07:15:16.023Z"
  },
  "assets": [],
  "annotations": [
    {
      "id": "annotation_minimal",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_minimal",
      "space_id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:16.103Z",
      "updated_at": "2026-10-04T07:15:16.103Z"
    }
  ],
  "publicLinks": [],
  "jobs": [],
  "runtimeAssetUrl": null
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

Refused request · HTTP 404

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_fixture_missing"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json

Captured local response · HTTP 404:

{
  "error": "space_not_found"
}

HTTP 404. 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: minimal.

Input · payload.json:

{
  "spaceId": "space_9338e6fc-cc93-421e-a783-6c8062088e0c"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_9338e6fc-cc93-421e-a783-6c8062088e0c"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_minimal",
    "title": "minimal reviewed title",
    "description": "",
    "status": "ready",
    "visibility": "private",
    "active_runtime_asset_id": "asset_6ad10ea2-d688-4a40-827d-baf67943669f",
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:16.023Z",
    "updated_at": "2026-10-04T07:15:16.385Z"
  },
  "assets": [
    {
      "id": "asset_6ad10ea2-d688-4a40-827d-baf67943669f",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_minimal",
      "space_id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
      "asset_kind": "runtime_sog",
      "file_name": "minimal.sog",
      "mime_type": "application/octet-stream",
      "object_key": "org/org_spaces_fixture/spaces/space_9338e6fc-cc93-421e-a783-6c8062088e0c/raw/asset_6ad10ea2-d688-4a40-827d-baf67943669f-minimal.sog",
      "byte_size": 62,
      "status": "ready",
      "created_at": "2026-10-04T07:15:16.204Z",
      "updated_at": "2026-10-04T07:15:16.385Z"
    }
  ],
  "annotations": [
    {
      "id": "annotation_minimal",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_minimal",
      "space_id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:16.103Z",
      "updated_at": "2026-10-04T07:15:16.103Z"
    }
  ],
  "publicLinks": [],
  "jobs": [
    {
      "id": "job_bf877e48-0e0c-48a0-bd8f-3bc01c7061db",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_minimal",
      "space_id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
      "source_asset_id": "asset_6ad10ea2-d688-4a40-827d-baf67943669f",
      "status": "completed",
      "processor_kind": "cloudflare_container",
      "message": "SOG import is already runtime-ready.",
      "created_at": "2026-10-04T07:15:16.317Z",
      "updated_at": "2026-10-04T07:15:16.385Z",
      "completed_at": "2026-10-04T07:15:16.385Z",
      "requested_by_user_id": "usr_spaces_fixture"
    }
  ],
  "runtimeAssetUrl": "/api/assets/asset_6ad10ea2-d688-4a40-827d-baf67943669f"
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

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: minimal.

Input · payload.json:

{
  "spaceId": "space_9338e6fc-cc93-421e-a783-6c8062088e0c"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_9338e6fc-cc93-421e-a783-6c8062088e0c"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_minimal",
    "title": "minimal reviewed title",
    "description": "",
    "status": "ready",
    "visibility": "private",
    "active_runtime_asset_id": "asset_6ad10ea2-d688-4a40-827d-baf67943669f",
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:16.023Z",
    "updated_at": "2026-10-04T07:15:16.498Z"
  },
  "assets": [
    {
      "id": "asset_6ad10ea2-d688-4a40-827d-baf67943669f",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_minimal",
      "space_id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
      "asset_kind": "runtime_sog",
      "file_name": "minimal.sog",
      "mime_type": "application/octet-stream",
      "object_key": "org/org_spaces_fixture/spaces/space_9338e6fc-cc93-421e-a783-6c8062088e0c/raw/asset_6ad10ea2-d688-4a40-827d-baf67943669f-minimal.sog",
      "byte_size": 62,
      "status": "ready",
      "created_at": "2026-10-04T07:15:16.204Z",
      "updated_at": "2026-10-04T07:15:16.385Z"
    }
  ],
  "annotations": [
    {
      "id": "annotation_minimal",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_minimal",
      "space_id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:16.103Z",
      "updated_at": "2026-10-04T07:15:16.103Z"
    }
  ],
  "publicLinks": [
    {
      "id": "link_7e677625-cb1a-4976-bb5b-183ad573c7ba",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_minimal",
      "space_id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
      "slug": "minimal-reviewed-title-92826b37",
      "enabled": 0,
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:16.465Z",
      "updated_at": "2026-10-04T07:15:16.498Z"
    }
  ],
  "jobs": [
    {
      "id": "job_bf877e48-0e0c-48a0-bd8f-3bc01c7061db",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_minimal",
      "space_id": "space_9338e6fc-cc93-421e-a783-6c8062088e0c",
      "source_asset_id": "asset_6ad10ea2-d688-4a40-827d-baf67943669f",
      "status": "completed",
      "processor_kind": "cloudflare_container",
      "message": "SOG import is already runtime-ready.",
      "created_at": "2026-10-04T07:15:16.317Z",
      "updated_at": "2026-10-04T07:15:16.385Z",
      "completed_at": "2026-10-04T07:15:16.385Z",
      "requested_by_user_id": "usr_spaces_fixture"
    }
  ],
  "runtimeAssetUrl": "/api/assets/asset_6ad10ea2-d688-4a40-827d-baf67943669f"
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

Refused request · HTTP 404

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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json

Captured local response · HTTP 404:

{
  "error": "space_not_found"
}

HTTP 404. 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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_bfe6af37-3588-406b-b103-7675eb527e82"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_workflow",
    "title": "workflow capture",
    "description": "Synthetic Gaussian capture",
    "status": "draft",
    "visibility": "private",
    "active_runtime_asset_id": null,
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:17.599Z",
    "updated_at": "2026-10-04T07:15:17.599Z"
  },
  "assets": [],
  "annotations": [
    {
      "id": "annotation_workflow",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_workflow",
      "space_id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:17.664Z",
      "updated_at": "2026-10-04T07:15:17.664Z"
    }
  ],
  "publicLinks": [],
  "jobs": [],
  "runtimeAssetUrl": null
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

Refused request · HTTP 404

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_fixture_missing"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json

Captured local response · HTTP 404:

{
  "error": "space_not_found"
}

HTTP 404. 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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_bfe6af37-3588-406b-b103-7675eb527e82"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_workflow",
    "title": "workflow reviewed title",
    "description": "Synthetic Gaussian capture",
    "status": "ready",
    "visibility": "private",
    "active_runtime_asset_id": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a",
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:17.599Z",
    "updated_at": "2026-10-04T07:15:17.818Z"
  },
  "assets": [
    {
      "id": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_workflow",
      "space_id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
      "asset_kind": "runtime_sog",
      "file_name": "workflow.sog",
      "mime_type": "application/octet-stream",
      "object_key": "org/org_spaces_fixture/spaces/space_bfe6af37-3588-406b-b103-7675eb527e82/raw/asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a-workflow.sog",
      "byte_size": 62,
      "status": "ready",
      "created_at": "2026-10-04T07:15:17.732Z",
      "updated_at": "2026-10-04T07:15:17.818Z"
    }
  ],
  "annotations": [
    {
      "id": "annotation_workflow",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_workflow",
      "space_id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:17.664Z",
      "updated_at": "2026-10-04T07:15:17.664Z"
    }
  ],
  "publicLinks": [],
  "jobs": [
    {
      "id": "job_5ae462f9-9351-421a-81be-3f0572366340",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_workflow",
      "space_id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
      "source_asset_id": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a",
      "status": "completed",
      "processor_kind": "cloudflare_container",
      "message": "SOG import is already runtime-ready.",
      "created_at": "2026-10-04T07:15:17.780Z",
      "updated_at": "2026-10-04T07:15:17.818Z",
      "completed_at": "2026-10-04T07:15:17.818Z",
      "requested_by_user_id": "usr_spaces_fixture"
    }
  ],
  "runtimeAssetUrl": "/api/assets/asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a"
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_bfe6af37-3588-406b-b103-7675eb527e82"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_workflow",
    "title": "workflow reviewed title",
    "description": "Synthetic Gaussian capture",
    "status": "ready",
    "visibility": "private",
    "active_runtime_asset_id": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a",
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:17.599Z",
    "updated_at": "2026-10-04T07:15:17.887Z"
  },
  "assets": [
    {
      "id": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_workflow",
      "space_id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
      "asset_kind": "runtime_sog",
      "file_name": "workflow.sog",
      "mime_type": "application/octet-stream",
      "object_key": "org/org_spaces_fixture/spaces/space_bfe6af37-3588-406b-b103-7675eb527e82/raw/asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a-workflow.sog",
      "byte_size": 62,
      "status": "ready",
      "created_at": "2026-10-04T07:15:17.732Z",
      "updated_at": "2026-10-04T07:15:17.818Z"
    }
  ],
  "annotations": [
    {
      "id": "annotation_workflow",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_workflow",
      "space_id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:17.664Z",
      "updated_at": "2026-10-04T07:15:17.664Z"
    }
  ],
  "publicLinks": [
    {
      "id": "link_9dc9855e-3378-40d1-a338-fb4f6af2c76e",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_workflow",
      "space_id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
      "slug": "workflow-reviewed-title-3aaa2d8c",
      "enabled": 0,
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:17.869Z",
      "updated_at": "2026-10-04T07:15:17.887Z"
    }
  ],
  "jobs": [
    {
      "id": "job_5ae462f9-9351-421a-81be-3f0572366340",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_workflow",
      "space_id": "space_bfe6af37-3588-406b-b103-7675eb527e82",
      "source_asset_id": "asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a",
      "status": "completed",
      "processor_kind": "cloudflare_container",
      "message": "SOG import is already runtime-ready.",
      "created_at": "2026-10-04T07:15:17.780Z",
      "updated_at": "2026-10-04T07:15:17.818Z",
      "completed_at": "2026-10-04T07:15:17.818Z",
      "requested_by_user_id": "usr_spaces_fixture"
    }
  ],
  "runtimeAssetUrl": "/api/assets/asset_3916ba10-a557-4b8f-84a5-8e1c732c2e9a"
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

Refused request · HTTP 404

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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json

Captured local response · HTTP 404:

{
  "error": "space_not_found"
}

HTTP 404. 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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_858bda7b-397a-4784-979e-609961a9a16e"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_858bda7b-397a-4784-979e-609961a9a16e",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_privacy",
    "title": "privacy capture",
    "description": "Synthetic Gaussian capture",
    "status": "draft",
    "visibility": "private",
    "active_runtime_asset_id": null,
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:18.493Z",
    "updated_at": "2026-10-04T07:15:18.493Z"
  },
  "assets": [],
  "annotations": [
    {
      "id": "annotation_privacy",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_858bda7b-397a-4784-979e-609961a9a16e",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:18.549Z",
      "updated_at": "2026-10-04T07:15:18.549Z"
    }
  ],
  "publicLinks": [],
  "jobs": [],
  "runtimeAssetUrl": null
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

Refused request · HTTP 404

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_fixture_missing"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json

Captured local response · HTTP 404:

{
  "error": "space_not_found"
}

HTTP 404. 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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_858bda7b-397a-4784-979e-609961a9a16e"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_858bda7b-397a-4784-979e-609961a9a16e",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_privacy",
    "title": "privacy reviewed title",
    "description": "Synthetic Gaussian capture",
    "status": "ready",
    "visibility": "private",
    "active_runtime_asset_id": "asset_97f79623-4436-421f-b9d8-24bae3fcd815",
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:18.493Z",
    "updated_at": "2026-10-04T07:15:18.746Z"
  },
  "assets": [
    {
      "id": "asset_97f79623-4436-421f-b9d8-24bae3fcd815",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_858bda7b-397a-4784-979e-609961a9a16e",
      "asset_kind": "runtime_sog",
      "file_name": "privacy.sog",
      "mime_type": "application/octet-stream",
      "object_key": "org/org_spaces_fixture/spaces/space_858bda7b-397a-4784-979e-609961a9a16e/raw/asset_97f79623-4436-421f-b9d8-24bae3fcd815-privacy.sog",
      "byte_size": 62,
      "status": "ready",
      "created_at": "2026-10-04T07:15:18.624Z",
      "updated_at": "2026-10-04T07:15:18.746Z"
    }
  ],
  "annotations": [
    {
      "id": "annotation_privacy",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_858bda7b-397a-4784-979e-609961a9a16e",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:18.549Z",
      "updated_at": "2026-10-04T07:15:18.549Z"
    }
  ],
  "publicLinks": [],
  "jobs": [
    {
      "id": "job_85640ab7-0cca-4f5a-9137-f91bf18db4c0",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_858bda7b-397a-4784-979e-609961a9a16e",
      "source_asset_id": "asset_97f79623-4436-421f-b9d8-24bae3fcd815",
      "status": "completed",
      "processor_kind": "cloudflare_container",
      "message": "SOG import is already runtime-ready.",
      "created_at": "2026-10-04T07:15:18.697Z",
      "updated_at": "2026-10-04T07:15:18.746Z",
      "completed_at": "2026-10-04T07:15:18.746Z",
      "requested_by_user_id": "usr_spaces_fixture"
    }
  ],
  "runtimeAssetUrl": "/api/assets/asset_97f79623-4436-421f-b9d8-24bae3fcd815"
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_858bda7b-397a-4784-979e-609961a9a16e"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_858bda7b-397a-4784-979e-609961a9a16e",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_privacy",
    "title": "privacy reviewed title",
    "description": "Synthetic Gaussian capture",
    "status": "ready",
    "visibility": "private",
    "active_runtime_asset_id": "asset_97f79623-4436-421f-b9d8-24bae3fcd815",
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:18.493Z",
    "updated_at": "2026-10-04T07:15:18.836Z"
  },
  "assets": [
    {
      "id": "asset_97f79623-4436-421f-b9d8-24bae3fcd815",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_858bda7b-397a-4784-979e-609961a9a16e",
      "asset_kind": "runtime_sog",
      "file_name": "privacy.sog",
      "mime_type": "application/octet-stream",
      "object_key": "org/org_spaces_fixture/spaces/space_858bda7b-397a-4784-979e-609961a9a16e/raw/asset_97f79623-4436-421f-b9d8-24bae3fcd815-privacy.sog",
      "byte_size": 62,
      "status": "ready",
      "created_at": "2026-10-04T07:15:18.624Z",
      "updated_at": "2026-10-04T07:15:18.746Z"
    }
  ],
  "annotations": [
    {
      "id": "annotation_privacy",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_858bda7b-397a-4784-979e-609961a9a16e",
      "label": "Fixture annotation",
      "body": "Synthetic source data; no published annotation mutation exists.",
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:18.549Z",
      "updated_at": "2026-10-04T07:15:18.549Z"
    }
  ],
  "publicLinks": [
    {
      "id": "link_490d197b-e359-41aa-93dc-8647c95ede96",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_858bda7b-397a-4784-979e-609961a9a16e",
      "slug": "privacy-reviewed-title-c6cc618a",
      "enabled": 0,
      "created_by": "usr_spaces_fixture",
      "created_at": "2026-10-04T07:15:18.812Z",
      "updated_at": "2026-10-04T07:15:18.836Z"
    }
  ],
  "jobs": [
    {
      "id": "job_85640ab7-0cca-4f5a-9137-f91bf18db4c0",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_858bda7b-397a-4784-979e-609961a9a16e",
      "source_asset_id": "asset_97f79623-4436-421f-b9d8-24bae3fcd815",
      "status": "completed",
      "processor_kind": "cloudflare_container",
      "message": "SOG import is already runtime-ready.",
      "created_at": "2026-10-04T07:15:18.697Z",
      "updated_at": "2026-10-04T07:15:18.746Z",
      "completed_at": "2026-10-04T07:15:18.746Z",
      "requested_by_user_id": "usr_spaces_fixture"
    }
  ],
  "runtimeAssetUrl": "/api/assets/asset_97f79623-4436-421f-b9d8-24bae3fcd815"
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

Refused request · HTTP 404

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"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json

Captured local response · HTTP 404:

{
  "error": "space_not_found"
}

HTTP 404. 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_ec15138f-dd1a-4a27-8374-a275d902cda8"
}

CLI:

topolo actions validate app_topolo_spaces.spaces.get --data @payload.json --json
topolo actions plan app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_spaces.spaces.get --resource-type workspace --resource-id "$SPACES_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_spaces.spaces.get",
    "input": {
      "spaceId": "space_ec15138f-dd1a-4a27-8374-a275d902cda8"
    },
    "resourceType": "workspace",
    "resourceId": "<identifier returned by granted resource discovery>"
  }
}

Captured local response · HTTP 200:

{
  "space": {
    "id": "space_ec15138f-dd1a-4a27-8374-a275d902cda8",
    "organization_id": "org_spaces_fixture",
    "workspace_id": "ws_spaces_privacy",
    "title": "Tracked privacy export",
    "description": "",
    "status": "processing",
    "visibility": "private",
    "active_runtime_asset_id": null,
    "thumbnail_asset_id": null,
    "capture_mode": "import",
    "created_by": "usr_spaces_fixture",
    "created_at": "2026-10-04T07:15:19.064Z",
    "updated_at": "2026-10-04T07:15:19.109Z"
  },
  "assets": [
    {
      "id": "asset_afe60d9d-8181-4ddb-aa1c-ca34b7c2a2fb",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_ec15138f-dd1a-4a27-8374-a275d902cda8",
      "asset_kind": "raw_import",
      "file_name": "capture.PLY",
      "mime_type": "application/octet-stream",
      "object_key": "org/org_spaces_fixture/spaces/space_ec15138f-dd1a-4a27-8374-a275d902cda8/raw/asset_afe60d9d-8181-4ddb-aa1c-ca34b7c2a2fb-capture.PLY",
      "byte_size": 62,
      "status": "uploaded",
      "created_at": "2026-10-04T07:15:19.080Z",
      "updated_at": "2026-10-04T07:15:19.093Z"
    }
  ],
  "annotations": [],
  "publicLinks": [],
  "jobs": [
    {
      "id": "job_414ba874-cbf4-4111-85f1-9f0d4ca6e043",
      "organization_id": "org_spaces_fixture",
      "workspace_id": "ws_spaces_privacy",
      "space_id": "space_ec15138f-dd1a-4a27-8374-a275d902cda8",
      "source_asset_id": "asset_afe60d9d-8181-4ddb-aa1c-ca34b7c2a2fb",
      "status": "waiting_processor",
      "processor_kind": "cloudflare_container",
      "message": "Waiting for the TopoloSpaces container processor to convert this import into SOG.",
      "created_at": "2026-10-04T07:15:19.109Z",
      "updated_at": "2026-10-04T07:15:19.130Z",
      "completed_at": null,
      "requested_by_user_id": "usr_spaces_fixture"
    }
  ],
  "runtimeAssetUrl": null
}

HTTP 200. Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl. After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

Verify the result

  • Confirm space.id and workspace_id, then inspect jobs, asset status, enabled public links and runtimeAssetUrl.
  • After processing, verify completed and active_runtime_asset_id before using a link. A waiting_processor job needs an actual available processor, not repeated speculative calls.

Errors and recovery

  • space_not_found (HTTP 404): Rediscover the exact space id in this granted workspace through spaces.list or a saved creation response; deletion or another workspace can make it unavailable.
  • 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

This read does not change service state. A missing id can indicate wrong workspace, deletion or an undiscoverable target; stop and rediscover.

  • List spaces: Read the latest one hundred space records in the selected workspace.
  • Process space asset: Queue a processing job for an uploaded asset in the same space and inspect its later state.
  • 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.