> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upsolve.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Promote dashboards between environments with encrypted .ucf files

The **Dashboard Sync** endpoints let you move dashboards (and the charts they
render) from one Upsolve environment to another — for example, from a
**staging** deployment where your users build and refine dashboards to a
**production** deployment that serves them.

This is designed for self-hosted (on-prem) deployments where both environments
were originally seeded from the **same `.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

<Steps>
  <Step title="Mark dashboards as exportable">
    Call [Mark Dashboards Exportable](/api-reference/endpoint/set-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.
  </Step>

  <Step title="Export to an encrypted .ucf file">
    Call [Export Dashboards](/api-reference/endpoint/export-dashboards-ucf) to
    download an encrypted `.ucf` file containing every exportable dashboard, the
    charts they reference, and their filters and themes.
  </Step>

  <Step title="Import into the target environment">
    Send the file's contents to
    [Import Dashboards](/api-reference/endpoint/import-dashboards-ucf) on the
    target (e.g. production) environment. Definitions are upserted in place,
    preserving ids and versions. Re-importing the same file is idempotent.
  </Step>
</Steps>

## Requirements & notes

* **Authentication:** all three endpoints require an Upsolve **admin API key**.
* **Encryption:** the `.ucf` file is AES-256-CBC encrypted with your
  deployment's `FILES_KEY`. The source and target environments must share the
  same `FILES_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.
