> ## 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.

# Propagate to Child Dashboards

> Pushes a parent dashboard's presentation settings — timezone, local-timezone flag, selected tables, and theme — down onto the tenant copies forked from it. The import endpoint already does this for the dashboards it carried; call this to back-fill environments seeded with `execute-patches`, or to re-run after a UCF that predates propagation. Idempotent. Requires an Upsolve admin API key.



## OpenAPI

````yaml post /v1/api/ucf/dashboards/propagate
openapi: 3.1.0
info:
  title: Upsolve API
  version: 1.4.2
servers:
  - url: https://api.upsolve.ai
security: []
tags: []
paths:
  /v1/api/ucf/dashboards/propagate:
    post:
      summary: Propagate parent dashboard settings to child dash…
      description: >-
        Pushes a parent dashboard's presentation settings — timezone,
        local-timezone flag, selected tables, and theme — down onto the tenant
        copies forked from it. The import endpoint already does this for the
        dashboards it carried; call this to back-fill environments seeded with
        `execute-patches`, or to re-run after a UCF that predates propagation.
        Idempotent. Requires an Upsolve admin API key.
      operationId: PostV1ApiUcfDashboardsPropagate
      requestBody:
        description: POST /v1/api/ucf/dashboards/propagate Request body
        content:
          application/json:
            schema:
              type: object
              properties:
                apiKey:
                  type: string
                  minLength: 1
                  description: >-
                    Upsolve API key, generated under Account → Developer
                    settings in the Upsolve Hub. Keys are user-scoped: pass
                    organizationId alongside the key to select which org to act
                    on.
                  examples:
                    - up_embed_************
                organizationId:
                  description: >-
                    Your Upsolve organization's UUID — the org that owns the API
                    key and project. This is NOT a project organization: do not
                    pass a value registered via /projects/register-organization,
                    and do not pass an `externalId` (only
                    `projectOrganizationId` accepts those). Omit it when using
                    an org-bound API key — the org is read from the key and any
                    value sent here is ignored. Required only for user-scoped
                    API keys (created under Account → Developer settings) and
                    for the Supabase JWT path, where the org is ambiguous and
                    membership is verified against it.
                  examples:
                    - 123e4567-e89b-12d3-a456-426614174000
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
                dashboardIds:
                  description: >-
                    Parent dashboards to propagate from. Omit to target every
                    dashboard in the organization that has at least one child.
                  type: array
                  items:
                    type: string
                    pattern: >-
                      ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$
                dryRun:
                  description: Report what would change without writing anything
                  type: boolean
            examples:
              example1:
                value:
                  apiKey: up_embed_************
                  organizationId: 123e4567-e89b-12d3-a456-426614174000
      responses:
        '200':
          description: POST /v1/api/ucf/dashboards/propagate Positive response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    const: success
                  data:
                    type: object
                    properties:
                      parentsRequested:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                        description: >-
                          Number of parent dashboards propagation was attempted
                          for
                      parentsWithNoChildren:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                        description: Of those, how many had no forked children
                      childrenUpdated:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                        description: Rows updated in the base `dashboards` table
                      versionRowsUpdated:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                        description: >-
                          Rows updated in `dashboards_versioning` (every version
                          of each child)
                      themesUpdated:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                        description: >-
                          Existing latest-version `dashboard_themes` rows
                          overwritten
                      themesInserted:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                        description: Theme rows created for children that had none
                      dryRun:
                        type: boolean
                        description: When true, the counts describe what would have changed
                    required:
                      - parentsRequested
                      - parentsWithNoChildren
                      - childrenUpdated
                      - versionRowsUpdated
                      - themesUpdated
                      - themesInserted
                      - dryRun
                    additionalProperties: false
                required:
                  - status
                  - data
                additionalProperties: false
        '400':
          description: POST /v1/api/ucf/dashboards/propagate Negative response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    const: error
                  error:
                    type: object
                    properties:
                      message:
                        type: string
                      code:
                        type: string
                      details:
                        type: object
                        propertyNames:
                          type: string
                        additionalProperties: {}
                    required:
                      - message
                    additionalProperties: false
                required:
                  - status
                  - error
                additionalProperties: false
      security:
        - APIKEY_1: []
components:
  securitySchemes:
    APIKEY_1:
      type: apiKey
      in: query
      name: apiKey
      x-in-actual: body
      description: apiKey MUST be supplied within the request body instead of query

````