.ucf file (via the execute-patches
command). Because the seed is identical, every dashboard, chart, filter, and
theme already shares the same id across environments — so importing is a true
upsert rather than a copy that risks duplicates.
Workflow
1
Mark dashboards as exportable
Call Mark Dashboards Exportable
on the source (e.g. staging) environment to flag the dashboards you want to
promote. Both global and tenant-scoped dashboards can be marked.
2
Export to an encrypted .ucf file
Call Export Dashboards to
download an encrypted
.ucf file containing every exportable dashboard, the
charts they reference, and their filters and themes.3
Import into the target environment
Send the file’s contents to
Import Dashboards on the
target (e.g. production) environment. Definitions are upserted in place,
preserving ids and versions. Re-importing the same file is idempotent.
The import also propagates the imported dashboards’ presentation settings
down to any copies your end users forked from them — see below.
Reaching dashboards your users forked
When an end user customizes a dashboard, they get their own copy of it. That copy keeps its own timezone, selected tables and theme, so an import that only upserted what the.ucf carried would update the original and leave every
forked copy showing the old styling.
To prevent that, the import pushes these settings from each imported dashboard
down onto the copies forked from it:
What is never overwritten: the copy’s own name and its dashboard config —
its layout, which charts it shows, and its filters. That’s the user’s work, and
it stays theirs.
The import response includes a
propagation object reporting how many copies
and rows were touched.
Chart versions are not propagated. A forked copy pins the chart versions it
was created with, so edits you make to a chart’s definition reach the original
dashboard but not copies that pinned an earlier version.
Re-running propagation on its own
Propagate to Child Dashboards runs the same step without an import. Use it to:- back-fill an environment that was seeded with the
execute-patchescommand rather than the import endpoint; - re-run after a
.ucfthat was imported before this behaviour existed; - preview the effect first — pass
dryRun: trueto get the same counts back without writing anything.
dashboardIds to target every dashboard in the organization that has at
least one forked copy. The operation is idempotent, so running it twice is
harmless.
Requirements & notes
- Authentication: all three endpoints require an Upsolve admin API key.
- Encryption: the
.ucffile is AES-256-CBC encrypted with your deployment’sFILES_KEY. The source and target environments must share the sameFILES_KEY, or the import will fail to decrypt. - Scope: the import rejects any payload (or row) whose organization does not match the authenticated organization, preventing cross-tenant writes.
- What travels: chart and dashboard definitions plus their filters and themes. Connections and data models are not included — they are assumed to already match from the original shared seed.
- Forked copies: the import reaches copies your end users made of the imported dashboards, but only their presentation settings — never their layout or content. See Reaching dashboards your users forked.