Akmal Kuliev
12/22/2025, 6:50 PMYvonne Changamuka
12/22/2025, 7:29 PMCan't find %s with identifier %s
To migrate an object with computed attributes, see Use Computed Attributes.
Let me know if this helps.Akmal Kuliev
12/23/2025, 5:47 AMJulius Kos
12/23/2025, 8:21 AMJulius Kos
12/23/2025, 8:28 AMwsA) to workspace B (wsB) via API:
# Get LDM from wsA
curl -H "Authorization: Bearer $API_TOKEN" \
$HOST_URL/api/v1/layout/workspaces/wsA_id/logicalModel \
> ldm.json
# Put LDM into wsB
curl -H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-X PUT \
-d @ldm.json \
$HOST_URL/api/v1/layout/workspaces/wsB_id/logicalModel
2. Option A – Move all analytics via API (analyticsModel)
For an empty target workspace, you can copy the entire analytics model (all dashboards, insights, metrics, etc.):
# Get analytics model from wsA
curl -H "Authorization: Bearer $API_TOKEN" \
$HOST_URL/api/v1/layout/workspaces/wsA_id/analyticsModel \
> analytics.json
# Put analytics model into wsB
curl -H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-X PUT \
-d @analytics.json \
$HOST_URL/api/v1/layout/workspaces/wsB_id/analyticsModel
If wsB already has dashboards/metrics, you must edit analytics.json and include only the objects you want to move (e.g., selected analyticalDashboards, visualizationObjects, metrics, etc.), otherwise you risk overwriting or conflicting with existing content.
Objects available under analyticsModel include:
• analyticalDashboards
• visualizationObjects
• metrics
• filterContexts
• dashboardPlugins
• analyticalDashboardExtensions
• attributeHierarchies
• exportDefinitions
2. Option B – Copy a specific dashboard via Python SDK (file-based)
If you want to copy just one dashboard (plus its definition) between workspaces, you can use the Python SDK to work with the declarative workspace layout
from gooddata_sdk import GoodDataSdk
from pathlib import Path
import shutil
# SDK setup
sdk = GoodDataSdk.create(host="<https://your-gooddata-host.com>", token="your-token")
# Workspaces and dashboard
src_ws = "source_workspace_id"
dst_ws = "destination_workspace_id"
dashboard_id = "your_dashboard_id_to_clone"
root_path = Path("Test")
# Step 1: Store both workspaces locally
sdk.catalog_workspace.store_declarative_workspace(src_ws, layout_root_path=root_path)
sdk.catalog_workspace.store_declarative_workspace(dst_ws, layout_root_path=root_path)
# Dashboard YAML path pattern:
# Test/gooddata_layouts/<orgID>/workspaces/<workspaceID>/analytics_model/analytical_dashboards/<dashboardID>.yaml
# Step 2: Copy dashboard YAML from src to dst
src_path = root_path / "gooddata_layouts/<orgID>/workspaces" / src_ws / "analytics_model/analytical_dashboards"
dst_path = root_path / "gooddata_layouts/<orgID>/workspaces" / dst_ws / "analytics_model/analytical_dashboards"
shutil.copy(src_path / f"{dashboard_id}.yaml", dst_path / f"{dashboard_id}.yaml")
# Step 3: Push updated layout to destination workspace
sdk.catalog_workspace.load_and_put_declarative_workspace(dst_ws, layout_root_path=root_path)
This is a workaround, not a built‑in “clone dashboard” feature.
• Both workspaces must have the *same LDM*; otherwise, you’ll get 400 errors about missing referenced entities (metrics, filterContexts, etc.).
• load_and_put_declarative_workspace overwrites the entire declarative layout of the destination workspace, so test carefully and consider starting from a backup.
When to use which
• API only (analyticsModel): good when you want to move all analytics from one workspace to another (especially if the target is empty).
• SDK + files: better when you want to move specific dashboards and are comfortable manipulating YAML files and then pushing the updated layout.Akmal Kuliev
12/23/2025, 3:31 PMYvonne Changamuka
12/23/2025, 8:25 PMAkmal Kuliev
12/25/2025, 3:23 AM